From d45ad950e5a01e5bdc319323d2b8c59a64f759f8 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sat, 29 Jan 2022 09:31:01 -0700 Subject: [PATCH] convert html to Format class. (#837) * convert html to Format class. * add default init. * capability comment --- CMakeLists.txt | 1 + GPSBabel.pro | 1 + html.cc | 99 +++++++++++++-------------------------------- html.h | 106 +++++++++++++++++++++++++++++++++++++++++++++++++ vecs.h | 4 +- 5 files changed, 138 insertions(+), 73 deletions(-) create mode 100644 html.h diff --git a/CMakeLists.txt b/CMakeLists.txt index a8a4a19cd..0e0a1f80b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -241,6 +241,7 @@ set(HEADERS grtcirc.h heightgrid.h holux.h + html.h inifile.h kml.h legacyformat.h diff --git a/GPSBabel.pro b/GPSBabel.pro index 035a8067b..6e2a6d619 100644 --- a/GPSBabel.pro +++ b/GPSBabel.pro @@ -228,6 +228,7 @@ HEADERS = \ grtcirc.h \ heightgrid.h \ holux.h \ + html.h \ inifile.h \ kml.h \ legacyformat.h \ diff --git a/html.cc b/html.cc index 53b9da72c..1db9f5083 100644 --- a/html.cc +++ b/html.cc @@ -19,74 +19,40 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#include -#include // for localtime +#include "html.h" #include // for QString, operator!= -#include // for QVector #include // for CaseInsensitive -#include "defs.h" -#include "formspec.h" // for FsChainFind, kFsGpx -#include "gbfile.h" // for gbfprintf, gbfclose, gbfopen, gbfputs, gbfile +#include // for int32_t +#include // for localtime, time_t, tm + +#include "defs.h" // for Waypoint, xfree, geocache_data, html_entitize, CSTR, pretty_deg_format, rot13, strip_nastyhtml, waypt_disp_all, utf_string, METERS_TO_FEET, gpsbabel_testmode, gs_get_cachetype, gs_get_container, mkshort_del_handle, mkshort_from_wpt, mkshort_new_handle +#include "formspec.h" // for FormatSpecificDataList, kFsGpx +#include "gbfile.h" // for gbfprintf, gbfclose, gbfopen, gbfputs #include "jeeps/gpsmath.h" // for GPS_Math_WGS84_To_UTM_EN #include "src/core/datetime.h" // for DateTime -#include "src/core/xmltag.h" // for xml_findfirst, xml_attribute, xml_tag, fs_xml, xml_findnext - +#include "src/core/xmltag.h" // for xml_findfirst, xml_tag, xml_attribute, fs_xml, xml_findnext -static gbfile* file_out; -static short_handle mkshort_handle; - -static char* stylesheet = nullptr; -static char* html_encrypt = nullptr; -static char* includelogs = nullptr; -static char* degformat = nullptr; -static char* altunits = nullptr; #define MYNAME "HTML" -static -QVector html_args = { - { - "stylesheet", &stylesheet, - "Path to HTML style sheet", nullptr, ARGTYPE_STRING, ARG_NOMINMAX, nullptr - }, - { - "encrypt", &html_encrypt, - "Encrypt hints using ROT13", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr - }, - { - "logs", &includelogs, - "Include groundspeak logs if present", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr - }, - { - "degformat", °format, - "Degrees output as 'ddd', 'dmm'(default) or 'dms'", "dmm", ARGTYPE_STRING, ARG_NOMINMAX, nullptr - }, - { - "altunits", &altunits, - "Units for altitude (f)eet or (m)etres", "m", ARGTYPE_STRING, ARG_NOMINMAX, nullptr - }, -}; - - - -static void -wr_init(const QString& fname) +void +HtmlFormat::wr_init(const QString& fname) { file_out = gbfopen(fname, "w", MYNAME); mkshort_handle = mkshort_new_handle(); } -static void -wr_deinit() +void +HtmlFormat::wr_deinit() { gbfclose(file_out); mkshort_del_handle(&mkshort_handle); } -static void -html_disp(const Waypoint* wpt) +void +HtmlFormat::html_disp(const Waypoint* wpt) const { int32_t utmz; double utme; @@ -227,8 +193,8 @@ html_disp(const Waypoint* wpt) gbfprintf(file_out, "\n"); } -static void -html_index(const Waypoint* wpt) +void +HtmlFormat::html_index(const Waypoint* wpt) const { char* sn = html_entitize(wpt->shortname); char* d = html_entitize(wpt->description); @@ -239,8 +205,8 @@ html_index(const Waypoint* wpt) xfree(d); } -static void -data_write() +void +HtmlFormat::write() { setshort_length(mkshort_handle, 6); @@ -266,29 +232,20 @@ data_write() gbfprintf(file_out, "\n"); gbfprintf(file_out, "

\n"); - waypt_disp_all(html_index); + + auto html_index_lambda = [this](const Waypoint* waypointp)->void { + html_index(waypointp); + }; + + waypt_disp_all(html_index_lambda); gbfprintf(file_out, "

\n"); - waypt_disp_all(html_disp); + auto html_disp_lambda = [this](const Waypoint* waypointp)->void { + html_disp(waypointp); + }; + waypt_disp_all(html_disp_lambda); gbfprintf(file_out, ""); gbfprintf(file_out, ""); } - - -ff_vecs_t html_vecs = { - ff_type_file, - { ff_cap_write, ff_cap_none, ff_cap_none }, - nullptr, - wr_init, - nullptr, - wr_deinit, - nullptr, - data_write, - nullptr, - &html_args, - CET_CHARSET_UTF8, 0 /* CET-REVIEW */ - , NULL_POS_OPS, - nullptr -}; diff --git a/html.h b/html.h new file mode 100644 index 000000000..0c74dca65 --- /dev/null +++ b/html.h @@ -0,0 +1,106 @@ +/* + Output only format for Human Readable formats. + + Copyright (C) 2004 Scott Brynen, scott (at) brynen.com + Copyright (C) 2002 Robert Lipe, robertlipe+source@gpsbabel.org + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ +#ifndef HTML_H_INCLUDED_ +#define HTML_H_INCLUDED_ + +#include // for QString +#include // for QVector + +#include "defs.h" // for arglist_t, ff_cap, ARG_NOMINMAX, ARGTYPE_STRING, ARGTYPE_BOOL, Waypoint, ff_cap_none, CET_CHARSET_UTF8, ff_cap_write, ff_type, ff_type_file, short_handle +#include "format.h" // for Format +#include "gbfile.h" // for gbfile + + +class HtmlFormat : public Format +{ +public: + QVector* get_args() override + { + return &html_args; + } + + ff_type get_type() const override + { + return ff_type_file; + } + + QVector get_cap() const override + { + /* waypoints, tracks, routes */ + return { ff_cap_write, ff_cap_none, ff_cap_none }; + } + + QString get_encode() const override + { + return CET_CHARSET_UTF8; + } + + int get_fixed_encode() const override + { + return 0; + } + + void wr_init(const QString& fname) override; + void write() override; + void wr_deinit() override; + +private: + /* Member Functions */ + + void html_disp(const Waypoint* wpt) const; + void html_index(const Waypoint* wpt) const; + + /* Data Members */ + + gbfile* file_out{}; + short_handle mkshort_handle{}; + + char* stylesheet = nullptr; + char* html_encrypt = nullptr; + char* includelogs = nullptr; + char* degformat = nullptr; + char* altunits = nullptr; + + QVector html_args = { + { + "stylesheet", &stylesheet, + "Path to HTML style sheet", nullptr, ARGTYPE_STRING, ARG_NOMINMAX, nullptr + }, + { + "encrypt", &html_encrypt, + "Encrypt hints using ROT13", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr + }, + { + "logs", &includelogs, + "Include groundspeak logs if present", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr + }, + { + "degformat", °format, + "Degrees output as 'ddd', 'dmm'(default) or 'dms'", "dmm", ARGTYPE_STRING, ARG_NOMINMAX, nullptr + }, + { + "altunits", &altunits, + "Units for altitude (f)eet or (m)etres", "m", ARGTYPE_STRING, ARG_NOMINMAX, nullptr + }, + }; + +}; +#endif // HTML_H_INCLUDED_ diff --git a/vecs.h b/vecs.h index a8ba3260e..71b829d4a 100644 --- a/vecs.h +++ b/vecs.h @@ -36,6 +36,7 @@ #include "ggv_bin.h" #include "globalsat_sport.h" #include "gpx.h" +#include "html.h" #include "kml.h" #include "legacyformat.h" #include "lowranceusr.h" @@ -68,7 +69,6 @@ extern ff_vecs_t easygps_vecs; extern ff_vecs_t saroute_vecs; extern ff_vecs_t gpl_vecs; extern ff_vecs_t text_vecs; -extern ff_vecs_t html_vecs; extern ff_vecs_t igc_vecs; extern ff_vecs_t brauniger_iq_vecs; extern ff_vecs_t mtk_vecs; @@ -251,7 +251,7 @@ private: #endif LegacyFormat gpl_fmt {gpl_vecs}; LegacyFormat text_fmt {text_vecs}; - LegacyFormat html_fmt {html_vecs}; + HtmlFormat html_fmt; LegacyFormat igc_fmt {igc_vecs}; LegacyFormat brauniger_iq_fmt {brauniger_iq_vecs}; LegacyFormat mtk_fmt {mtk_vecs}; -- 2.30.2